﻿using System;
using System.Reflection;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    // 无参构造
    public Person() { }

    // 带参构造
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public override string ToString() => $"{Name} ({Age}岁)";
}

class Program
{
    static void Main()
    {
        // 方式1：使用Activator（适合无参构造）
        var type = typeof(Person);
        var person1 = (Person)Activator.CreateInstance(type);
        person1.Name = "李华";
        person1.Age = 25;
        Console.WriteLine(person1); // 输出：李华 (25岁)

        // 方式2：使用ConstructorInfo（适合带参构造）
        var ctor = type.GetConstructor(new[] { typeof(string), typeof(int) });
        var person2 = (Person)ctor.Invoke(new object[] { "王伟", 30 });
        Console.WriteLine(person2); // 输出：王伟 (30岁)

        // 方式3：使用dynamic简化调用
        dynamic? person3 = Activator.CreateInstance(type, "张芳", 28);
        if (person3 != null)
        {
            Console.WriteLine(person3); // 输出：张芳 (28岁)
        }
    }
}

